package prueba.prueba.helpers;
import java.util.LinkedList;

import prueba.prueba.TypeWords;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
 
public class WordsHelper extends SQLiteOpenHelper {
 
    //Sentencia SQL para crear la tabla de Usuarios
    String sqlCreate = "CREATE TABLE words (id INTEGER, word TEXT,meaning TEXT,num_practices INTEGER,num_hits INTEGER,type INTEGER,id_language INTEGER)";
 
    public WordsHelper(Context contexto, String nombre,CursorFactory factory, int version) {
        super(contexto, nombre, factory, version);
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        //Se ejecuta la sentencia SQL de creación de la tabla
        db.execSQL(sqlCreate);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int versionAnterior, int versionNueva) {
        //NOTA: Por simplicidad del ejemplo aquí utilizamos directamente la opción de
        //      eliminar la tabla anterior y crearla de nuevo vacía con el nuevo formato.
        //      Sin embargo lo normal será que haya que migrar datos de la tabla antigua
        //      a la nueva, por lo que este método debería ser más elaborado.
 
        //Se elimina la versión anterior de la tabla
        db.execSQL("DROP TABLE IF EXISTS words");
 
        //Se crea la nueva versión de la tabla
        db.execSQL(sqlCreate);
    }
    
    
    
    // Comprobar si existe y actualizar, etc.
    public void create(int id,String word,String meaning,int type_word,int language){
    	 //Insertamos los datos en la tabla Usuarios
    		//Toast.makeText(null,"inserta un registro",Toast.LENGTH_SHORT).show();
    	try{
    		getWritableDatabase().execSQL("INSERT INTO words (id,word,meaning,type,id_language) " + "VALUES (" + id + ", '" + word +"','" + meaning +"',"+ type_word +","+ language +")");
   
    		
    	}
    	catch(Exception ex){
    		Log.i("SQL","Peta por caracteres utf8");
    	}
    }
    
    public void delete(int id){
    	try{
    		getWritableDatabase().delete("words","id=?",new String[]{id + ""});
    		//getWritableDatabase().execSQL("DELETE words WHERE id = " + id);
    	}
    	catch(Exception ex){
    		Log.e("SQL","Peta al borrar un registro");
    	}
    }
    
    public void update(int id,int num_hits,int num_practices){
    	try{
    	 	getWritableDatabase().execSQL("UPDATE words SET num_hits="+num_hits+" WHERE id="+id);
         	getWritableDatabase().execSQL("UPDATE words SET num_practices="+num_practices+" WHERE id="+id);
       
    	}
    	catch(Exception ex){
    		Log.e("SQL","Peta al hacer update");
    	}
    }
    
    
    public LinkedList <Word> select_words(int id_type,int id_language){
    	
    	LinkedList <Word> list_word = new LinkedList<Word>();
    	Cursor c = null;
    	if (id_type == -1 && id_language == -1){
    		String[] args = new String[]{20 + ""};
    	
     		c = getWritableDatabase().rawQuery("SELECT * FROM words ORDER BY num_hits DESC LIMIT 1000",args);
    	}
    	else if (id_type == -1){
    		String[] args = new String[]{id_language + "",20 + ""};
     		c = getWritableDatabase().rawQuery("SELECT * FROM words WHERE id_language="+id_language+ " ORDER BY num_hits DESC LIMIT ?",args);
    	}
    	
    	else{
     		String[] args = new String[]{};
     		c = getWritableDatabase().rawQuery("SELECT * FROM words WHERE type="+id_type+" AND id_language="+id_language+ " ORDER BY num_hits LIMIT 1000",args);
         	
     	//	c = getWritableDatabase().rawQuery("SELECT * FROM words WHERE type =" +id_type+ " ORDER BY num_hits DESC LIMIT 20",args);
     		//c = getWritableDatabase().rawQuery("SELECT * FROM words",args);
    	}
 		
 		
 		//Nos aseguramos de que existe al menos un registro
 		if (c.moveToFirst()) {
 		     //Recorremos el cursor hasta que no haya más registros
 			TypeWords type = null;
 			try{
 				type = TypeWords.values()[c.getInt(5)];
 			}
 			catch(Exception ex){
 				type = TypeWords.sustantivos;
 			}
 		
 			
 		     do {
 		    	 //id	word	meaning	language	type	num_practices	num_hits	ts
 		    	 list_word.add(new Word(c.getInt(0), c.getString(1), c.getString(2),c.getInt(5),c.getInt(6),type)); // de momento no es necesario el constructor anterior.
 		     } while(c.moveToNext());
 		}
 		
 		return list_word;
 		
// 		.rawQuery(" SELECT usuario,email FROM Usuarios WHERE usuario='usu1' ");
    	//getWritableDatabase().execSQL("SELECT * FROM words where ");
    }
    
    
    
    // Listar las palabras en base a un criterio.
    
    
    
}